#include "module_log.h"
#include "SEGGER_RTT.h"
#include <stdio.h>
#include <string.h>

// 默认输出方式：RTT
static log_output_t g_log_output = LOG_OUTPUT_RTT;

// 默认 UART 句柄（若使用 UART 模式需配置）
static UART_HandleTypeDef *g_log_huart = NULL;

// 模块开关表
static uint8_t log_enable[LOG_MODULE_MAX] = {
    1, // LOG_MODULE_SYSTEM
    1, // LOG_MODULE_UARTPROTOCOL
    1  // LOG_MODULE_IR
};
// 初始化 不配置 UART 则传 NULL
void log_init(UART_HandleTypeDef *huart)
{
    g_log_huart = huart;
}
// 设置输出方式
void log_set_output_type(log_output_t type)
{
    g_log_output = type;
}
// 设置模块开关
void log_set_module_enable(log_module_t module, uint8_t enable)
{
    if (module < LOG_MODULE_MAX)
    {
        log_enable[module] = enable;
    }
}
// 打印日志
void log_printf(log_module_t module, const char *fmt, ...)
{
    if (module >= LOG_MODULE_MAX)
        return;
    if (!log_enable[module])
        return; // 模块关闭

    char buffer[256];
    va_list args;
    va_start(args, fmt);

    if (g_log_output == LOG_OUTPUT_RTT)
    {
        SEGGER_RTT_vprintf(0, fmt, &args);
        va_end(args);
        SEGGER_RTT_WriteString(0, buffer);
    }
    else if (g_log_output == LOG_OUTPUT_UART && g_log_huart)
    {
        vsnprintf(buffer, sizeof(buffer), fmt, args);
        va_end(args);
        HAL_UART_Transmit(g_log_huart, (uint8_t *)buffer, strlen(buffer), HAL_MAX_DELAY);
    }
}
